display: Stop using devicemanager internally
authorMatthias Clasen <mclasen@redhat.com>
Fri, 24 Nov 2017 16:31:18 +0000 (11:31 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 25 Nov 2017 16:04:14 +0000 (11:04 -0500)
We can just use the seats to find out about device removals.

gdk/gdkdisplay.c

index f40b1e2d756cb9e5f40e222691efd11b6d964b88..0377888f25b295c7248daefc1b0b265c2610ee54 100644 (file)
@@ -124,29 +124,9 @@ gdk_display_real_make_default (GdkDisplay *display)
 {
 }
 
-static void
-device_removed_cb (GdkDeviceManager *device_manager,
-                   GdkDevice        *device,
-                   GdkDisplay       *display)
-{
-  g_hash_table_remove (display->device_grabs, device);
-  g_hash_table_remove (display->pointers_info, device);
-
-  /* FIXME: change core pointer and remove from device list */
-}
-
 static void
 gdk_display_real_opened (GdkDisplay *display)
 {
-  GdkDeviceManager *device_manager;
-
-  G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-  device_manager = gdk_display_get_device_manager (display);
-  G_GNUC_END_IGNORE_DEPRECATIONS;
-
-  g_signal_connect (device_manager, "device-removed",
-                    G_CALLBACK (device_removed_cb), display);
-
   _gdk_display_manager_add_display (gdk_display_manager_get (), display);
 }
 
@@ -396,11 +376,6 @@ static void
 gdk_display_dispose (GObject *object)
 {
   GdkDisplay *display = GDK_DISPLAY (object);
-  GdkDeviceManager *device_manager;
-
-  G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-  device_manager = gdk_display_get_device_manager (GDK_DISPLAY (object));
-  G_GNUC_END_IGNORE_DEPRECATIONS;
 
   _gdk_display_manager_remove_display (gdk_display_manager_get (), display);
 
@@ -408,7 +383,7 @@ gdk_display_dispose (GObject *object)
   display->queued_events = NULL;
   display->queued_tail = NULL;
 
-  if (device_manager)
+  if (display->device_manager)
     {
       /* this is to make it drop devices which may require using the X
        * display and therefore can't be cleaned up in finalize.
@@ -1690,6 +1665,16 @@ gdk_display_set_rgba (GdkDisplay *display,
   g_object_notify_by_pspec (G_OBJECT (display), props[PROP_RGBA]);
 }
 
+static void
+device_removed_cb (GdkSeat    *seat,
+                   GdkDevice  *device,
+                   GdkDisplay *display)
+{
+  g_hash_table_remove (display->device_grabs, device);
+  g_hash_table_remove (display->pointers_info, device);
+
+  /* FIXME: change core pointer and remove from device list */
+}
 
 void
 gdk_display_add_seat (GdkDisplay *display,
@@ -1700,6 +1685,8 @@ gdk_display_add_seat (GdkDisplay *display,
 
   display->seats = g_list_append (display->seats, g_object_ref (seat));
   g_signal_emit (display, signals[SEAT_ADDED], 0, seat);
+
+  g_signal_connect (seat, "device-removed", G_CALLBACK (device_removed_cb), display);
 }
 
 void
@@ -1711,6 +1698,8 @@ gdk_display_remove_seat (GdkDisplay *display,
   g_return_if_fail (GDK_IS_DISPLAY (display));
   g_return_if_fail (GDK_IS_SEAT (seat));
 
+  g_signal_handlers_disconnect_by_func (seat, G_CALLBACK (device_removed_cb), display);
+
   link = g_list_find (display->seats, seat);
 
   if (link)